Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

744
Views
obtener uno del nuevo nombre del pod después del estado de implementación de kubectl | kubectl get pods --field-selector devuelve Terminación de pods

El problema es que después de implementar una nueva implementación como

 kubectl apply -f deployment.yml

(digamos implementación con una réplica)

Kubernetes creará un segundo pod y apagará el anterior; hasta ahora, está bien.

Pero inmediatamente después de aplicar kubectl, me gustaría detectar en CI/CD si la implementación fue exitosa y, en cualquier caso (sin importar si la implementación tuvo éxito o falló), obtenga el registro de uno de los pods recién implementados para proporcionar la mayor cantidad de información posible en CI /CD log para determinar qué salió mal.

entonces estoy usando

 kubectl rollout status deployment deployment-name

que está esperando la implementación para implementarse. Inmediatamente después, terminará con dos pods, uno en estado "En ejecución" y otro "Terminando".

Ahora la parte problemática: normalmente usaría un método como

 kubectl get pods --selector=app=deployment-name --output=jsonpath='{.items[*].metadata.name}' --field-selector=status.phase=Running

pero desafortunadamente devolverá los nombres de ambos pods ("En ejecución" y "Terminando") separados por espacios.

Ahora he probado también

 kubectl get pods --selector=app=deployment-name --output=jsonpath='{.items[*].metadata.name}' --field-selector=status.phase=Running,status.phase!=Terminating

según la documentación:

pero por alguna razón esto devolverá exactamente el mismo resultado, ambos pods ejecutándose y finalizando.

La pregunta es:

¿Cómo excluir correctamente los pods TERMINATING del resultado?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Problema conocido desde 2018. Aún no se ha resuelto.

Consulte Kubectl devuelve pods en varios estados cuando solo se seleccionan aquellos en estado En ejecución a través de --field-selector o -o jsonpath para obtener más detalles.

En resumen: NO hay un comando de una línea normal, CORTO y adecuado que haga lo que usted quiere.

Razones detrás de eso :

Esto parece no ser un error. La columna STATUS de salida de kubectl get pods no muestra status.phase. kubectl get pods muestra el formato de tabla del objeto PodList y usa los estados status.containerStatuses para mostrar los datos de la columna STATUS.

Los estados válidos de la fase del pod son pendiente, en ejecución, correcto, fallido y desconocido. De este documento, el estado 'En ejecución' depende de 'restartPolicy'.

Jsonpath se aplica al objeto 'PodList', no a la salida de kubectl. status.containerStatuses indica si los contenedores de pod se están ejecutando o no. Los selectores de campo varían según los tipos de recursos de Kubernetes. status.containerStatuses no es compatible con los selectores de campo de pods.

Soluciones alternativas:

1. kubectl get pods | grep Running

2. kubectl get pods -o jsonpath='{.items[*].status.containerStatuses[*].state.running},{.items[*].metadata.name}' --field-selector=status.phase==Running | sed 's/ /\n/' | grep startedAt | awk -F',' '{print $2}'

3. ( fuente ) kubectl get pods --field-selector=status.phase=Running --template {{range .items}}{{ if not .metadata.deletionTimestamp }}{{.metadata.name}}{{"\n"}}{{end}}{{end}}

over 4 years ago · Santiago Trujillo Report

0

desde la línea de comandos puedes usar comandos como

 grep

para atrapar lo que te gusta o puedes hacer lo que hago y simplemente mirar todas las vainas con

 watch

Comando para ver los cambios y ver los errores desde una terminal separada.

Lo que uso para este tipo de situaciones:

 watch -n0.5 " kubectl get pods | grep -v 'Running' "

para capturar pods con estado no en ejecución (Completado, OOMKilled, Pendiente, etc.) y luego desde una terminal separada

 kubectl logs podName && kubectl describe pods podName

Espero haber sido un poco de ayuda.

Incluso para obtener el último número de revisión que uso

 kubectl rollout history deployment.v1.apps/deploymentName | tail -2 | head -1 | awk '{print $1}'

Pero tal vez puedas usar

 kubectl get pods --sort-by=.metadata.creationTimestamp

y luego tome el último, así que finalmente tal vez, puede usar

 kubectl logs -c [containerName] $(kubectl get pods --sort-by=.metadata.creationTimestamp | tail -1 | awk '{print$1}')

esto me puede dar el último pod creado y sus registros

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!